不管是 MinIO Client 还是 SDK,报错:The request signature we calculated does not match the signature you provided. Check your key and signing method.
按以下情况依次排查问题:
MinIO 容器内部时间、MinIO Client 容器内部时间、宿主机时间是否同步MinIO 内的证书、Nginx 证书、Frp 证书是否一致查看 Nginx 日志,检查请求的 ip 是否为真实 ip时间不同步问题创建容器时加入配置来同步宿主机时间:
-e TZ=Asia/Shanghai \-v /etc/localtime:/etc/localtime:ro \-v /etc/timezone:/etc/timezone:ro \不同容器内可能显示的时区不同,例如宿主机显示 CST 时区上午8点,而容器内显示 GMT 时区上午0点,那么这两个时间是相同的。部分机器可能不是 24 小时制,但只要手动换算后时间同步即可
证书问题证书不一定要指向同一个路径,也不一定要同一个格式,但是绑定的必须是同一个域名
MinIO 容器内部目录 /root/.minio/certs 中需要 public.crt 和 private.key ,public.crt 可以由 pem 格式改后缀名得到
如果是多个域名,可以在此目录下建子目录来存放,例如如果我有两个域名 oss.cimoc.cn 和 myoss.cimoc.cn 都指向同一个 MinIO 服务,那么 /root/.minio/certs 目录结构应该如下:
-certs -oss.cimoc.cn-public.crt-private.key -myoss.cimoc.cn-public.crt-private.keyNginx 的 SSL 配置参考:
# 公钥也可以是crt格式ssl_certificate/path/to/fullchain.pem;# 私钥也可以是key格式ssl_certificate_key/path/to/privkey.pem;ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;add_header Strict-Transport-Security "max-age=31536000";error_page 497 https://$host$request_uri;Frp 的 SSL 配置
frpc.ini:
plugin = https2httpplugin_crt_path = /path/to/public.crtplugin_key_path = /path/to/private.keyIp问题Nginx 的日志默认在 /var/log/nginx/access.log
如果你发现请求 MinIO 的日志 IP 如下是 127.0.0.1,那么就是 IP的问题导致签名无法校验通过
127.0.0.1 - - [09/Nov/2023:09:21:47 +0800] "GET /minio/test-img/ HTTP/1.1" 200 757 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"在 Nginx 配置中加上:
proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;如果有 Frp,检查 frpc.ini 是否有下面的配置,如果有,删除掉:
plugin_host_header_rewrite = 127.0.0.1重启服务如果给 MinIO 添加了 证书,那么需要重启:
docker stop miniodocker start minio修改了 Nginx 配置,需要重载或重启(二选一):
# 重载配置nginx -s reload# 重启systemctl restart nginx修改了 frpc.ini,需要重启:
# 系统服务重启systemctl restart frpc# 如果没有配置系统服务# 找到pidps -ef |grep frpc# killkill -9 找到的pid# 进入frp的目录cd /yourfrp# 启动frpcfrpc -c frpc.ini